perm filename NPROM.FAI[CMS,LCS]4 blob
sn#349386 filedate 1978-04-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00011 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 NEW MONITOR AND BOOTSTRAP PROM.
C00003 00003 RESET
C00005 00004 Enable disk
C00007 00005 START
C00008 00006 MANUAL RESET
C00010 00007 DPY DDT LOOP
C00012 00008 PRINT ADDRESS/VAL
C00014 00009 DISPLAY CHR
C00016 00010 Paper tape loader
C00017 00011 Prom reset and interupt vectors
C00018 ENDMK
C⊗;
; NEW MONITOR AND BOOTSTRAP PROM.
.INSERT ASMBL.FAI
UNDEF←377
; ZPAGE RAM
TFLG: 0
VAL: 0
ADR: 0
0
BLOCK 15 ;OLD DDT RAM
CUR: 0 ;Cursor
0
SD: 0 ;Screen edges
ED: 0
RAS: 0 ;Dpy control defaults
ROW: 0
DPY: 0
MIX: 0
BRCODE: 0 ;Default bit rate
RSCODE: 0 ;Default acia control word
KBCODE: 0 ;Default keyboard control word
;RESET
LOC 177274 ;LOC 177000
SRSTR←UNDEF ;System reset register
RST: PHA ;Save A
RSTREG←UNDEF ;POWER ON RESET REG
PORBIT←UNDEF ;POWER ON RESET BIT
LDA RSTREG ;CHECK FOR POWER ON RESET
ANDI PORBIT
BNE MANUAL ;NOT POWER ON
DSKSEL←176437;Floppy select
JSR RSTAK ;Reset stack and decimal mode
;Stack and decimal mode reset
PDP←377 ;STACK DEPTH
RSTAK: LDXI PDP ;Get stack depth.
TXS
CLD ;CLEAR DECIMAL MODE
RTS
;Reset ram jumps.
JMPSET:
;Setup interrupt vectors.
IVECT←176360 ;Ram interrupt vector table address.
LDXI 17 ;Number of vectors * 2
IVSET: LDAX IVDEF ;Default vector setup loop
STAX IVECT
DEX
BPL IVSET
PRIC←176436 ;PRI CONTROL REGISTER ADDRESS
LDAI UNDEF ;SETUP PRI CONTROL REGISTER
STA PRIC
;Enable disk
LDAI 20 ;20 = Head unloaded and
STA DSKSEL ;disk init disabled.
FDSKC←176420 ;DISK COMMAND REGISTER
FDSKT←176421 ;DISK TRACK REGISTER
FDSKS←176422 ;DISK SECTOR REGISTER
FDSKD←176423 ;DISK DATA REGISTER
LDAI 163 ;Read 1 IBM sector (128 bytes)
STA FDSKC ;from the first sector on the
;first track.
;SETUP DMA
FDMAA←176400 ;FDSK DMA ADDRESS REGISTER
FDMAC←176401 ;FDSK COUNT REGISTER
DMACON←176410;DMA COMMAND REGISTER
LDAI 0 ;RESET DMA
STA DMACON
STA FDMAA ;SETUP DMA ADDRESS
LDAI 2 ;1000
STA FDMAA
LDAI 377 ;SETUP DMA COUNT
STA FDMAC
LDAI 201 ;CNT=512-1
STA FDMAC
LDAI 141 ;ENABLE FDSK DMA
;START
BOOTS←1000 ;BOOTSTRAP START ADDRESS
DMAINT:
DSKINT:
JMP BOOTS ;JUMP TO BOOT START
;Default interupt vectors.
IVDEF: IVERR ;Error
PROM
IVERR ;Error
PROM
UNLOAD ;Disable head preload
PROM
MODINT ;TTY default
PROM
DMAINT ;Disk load and boot
PROM
DSKINT ;Disk load and boot
PROM
IVERR ;Error
;MANUAL RESET
MANUAL: LDAI 20 ;Unload disk head.
STA DSKSEL
JSR RCDPY ;Reset chr dpy
JSR RMOD ;Reset BRATE, ACIA, and modem.
;Reset chr dpy
RCDPY: LDAI 0 ;Reset cursor
STAZ CUR
LDAI DPYRAM
STAZ CUR+1
RASTER←171760;RASTER OFFSET
CHRROW←171761;CHR ROW OFFSET
DPYC←171764 ;VIDIO CONTROL
VMIX←171765 ;VIDIO MIXER
LDAI 14 ;SET UP DPY DEFAULTS
STAZ RAS ;SHOULD BE 0,0
LDAI 377
STAZ ROW
LDAI 100 ;CURSOR ENABLE
STAZ DPY
LDAI 1 ;NORMAL MIX
STAZ MIX
;Setup screen edges
LDAI 200
STAZ SD ;Upper edge
LDAI 210
STAZ ED ;lower edge
RTS
;RESET BRATE AND ACIA DEFAULTS
RSDEF←25 ;ACIA CONTROL DEFAULT
RMOD: LDAI 15 ;Set bit rate to 300
STAZ BRCODE
LDAI RSDEF ;SETUP ACIA DEFAULT
STAZ RSCODE
RTS
;RESET KEY BOARD DEFAULTS
KBD←173370 ;KB DATA REGISTER
KBC←173371 ;KB CONTROL REGISTER
LDAI UNDEF ;RESET KB DEFAULT
STAZ KBCODE
;DPY DDT LOOP
PCR: LDAI 15 ;PRINT <cr>.
JSR PCHR
PLF: LDAI 12
JSR PCHR ;PRINT <cr>
GNEXT: JSR GCHR ;Wait for next chr
ANDI 177
;RAM JUMP
ECHO: JSR PCHR ;Echo it
CMPI 12 ;<lf>
BEQ LF
CMPI 60 ;Check for octal digit
BCC CKCMD
CMPI 70
BCS CKCMD
ANDI 7
LDXI 3
SHFT: ASLZ TMP
ROLZ TMP+1
DEX
BNE SHFT
ORAZ TMP
STAZ TMP
INCZ TFLG ;Set number flag
JMP GNEXT ;Wait for next chr
CKCMD: CMPI "/" ;Examine
BEQ SETAD
CMPI "P" ;Proceed
BEQ GO
CMPI "T" ;TTY
BEQ TTY
CMPI "B" ;Modem boot
BEQ MBOOT
CMPI "L" ;Modem load
BEQ MLOAD
CMPI "U" ;Modem unload
BEQ MUNLOD
ERROR:
JMP GNEXT
;PRINT ADDRESS/VAL
PAV: LDXI 0
LDAI 1 ;# OF DIGITS
STAZ NDIG
STAZ TFLG ;SET BIT MASK
LDYI 2 ;# OF BITS + C
JSR RLOOP ;PRINT "0" OR "1"
LDAI 5
STAZ NDIG
LDAI 7
STAZ TFLG
JSR CLOOP ;PRINT 5 OCTAL DIGITS
LDAI "/"
JSR PCHR ;PRINT "/"
LDAI 1
STAZ NDIG
LDYI 3
STYZ TFLG
JSR DLOOP ;PRINT "0" - "3"
LDAI 2
STAZ NDIG
LDAI 7
STAZ TFLG
JSR CLOOP ;PRINT 2 OCTAL DIGITS
RTS
CLOOP: LDYI 3 ;FOR 3 BITS PER DIGIT
RLOOP: ROLZ VAL ;ROTATE ADDRESS AND VALUE
ROLZ ADR
ROLZ ADR+1
DLOOP: DEY
BNE RLOOP
LDAZ VAL ;GET NEXT DIGIT
ANDZ TFLG
ORAI 60 ;CONVERT TO ASCII
JSR PCHR ;PRINT IT (Ram jump)
DECZ NDIG
BNE CLOOP ;NEXT DIGIT
RTS
;DISPLAY CHR
PDPY: STAIX CUR ;WRITE CHR INTO CHRDPY MEM
INCZ CUR ;INCREMENT CURSOR
LDAZ CUR
ANDI 77 ;CHECK IF OFF RIGHT EDGE
BEQ CRLF ;CLEAR NEXT LINE
CURREG←171762 ;CURSOR CONTROL REGISTERS
UPCUR: LDAZ CUR ;UPDATE CURSOR
STA CURREG
LDAZ CUR+1
STA CURREG+1
RTS
CRLF: DECZ CUR ;FIX CURSOR
LDAZ CUR
ANDI 300 ;<CR>
STAZ CUR ;Fall through to line feed
;LINE FEED
LF: CLC
LDAZ CUR
ADCI 100 ;NEXT LINE
STAZ CUR
BCC NOTOFF
INCZ CUR+1
LDAZ CUR+1
CMPZ ED ;BOTTOM OF SCREEN
BEQ GLITCH
;Clear to end of line
CTEOL: LDAZ CUR
ANDI 77
EORI 77
TAY
LDAI 40 ;<space>
CLR: STAIY CUR
DEY
BNE CLR
RTS
;Paper tape loader
PTLOAD:
;Prom reset and interupt vectors
LOC 200266 ;LOC 177772
NMIV: NMIINT ;Prom Non maskable interupt vector
PROM
RSTV: RST ;Prom reset vector
PROM
;Prom interupt request vector
IRQV: 0 ;0 for PIV enable
0
END